bool str2int( const char *str, int *numero ) {
	int base = 10;
	int signo = 1;

	*numero = 0;

	if ( *str == '-' ) {
		signo = -1;
		str++;
	}


	/* Reconocemos la base del número */
	if ( *str == '0' ) {
		// Puede ser cualquiera de las bases.
		if ( *(str + 1) == 'x' || *(str + 1) == 'X') {
			base = 16;
			str += 2;
		} else if ( *(str + 1) == 0 ) {
			return true;
		} else {
			base = 8;
			str++;
		}
	}

	int n;
	while ( ( n = *str++ ) ) {
		if ( base == 16 ) {
			if ( n >= 'a' )
				n -= 'a';
			else if ( n >= 'A' )
				n -= 'A';
			else
				n -= '0';

			if ( n < 0 || n > 15 )
				return false;
		} else {
			n -= '0';

			if ( n < 0 || n > 9 )
				return false;

			if ( base == 8 && n > 7 )
				return false;
		}
		*numero = *numero * base + n; 
	}
	
	*numero *= signo;
	return true;
}
